<!--
 * @Descripttion: 
 * @Version: 
 * @Author: gaohj
 * @Date: 2022-10-28 08:05:07
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2022-10-28 14:43:57
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
      数组常用方法4

      13. forEach()
        参数是一个函数 
        + 语法: 数组.forEach( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 遍历数组
        + 返回值: 没有(undefined)


      14. map()
        + 语法: 数组.map( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 映射数组 每一项都执行相同的操作 
        + 返回值: 和原始数组长度一样的数组, 只不过内部数据经过映射加工
        + 注意: 映射条件以 return 的形式书写


      15. filter()
        + 语法: 数组.filter( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 过滤数组
        + 返回值: 必然是一个新数组, 内部存储的是原始数组内过滤出来的部分数据
        + 注意: 过滤条件以 return 的形式书写


      16. find()
        + 语法: 数组.find( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 在原始数组内查找满足条件的第一项
        + 返回值: 找到的数据
        + 注意: 查找条件以 return 的形式书写


      17. findIndex()
        + 语法: 数组.findIndex( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 在原始数组内查找满足条件的第一项的索引
        + 返回值: 找到的数据的索引
        + 注意: 查找条件以 return 的形式书写


      18. every()
        + 语法: 数组.every( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 判断数组内是否每一个都满足条件
        + 返回值: 一个布尔值
          => true, 说明数组内每一个数据都满足条件
          => false, 说明数组内至少有一个是不满足条件的
        + 注意: 判断条件以 return 的形式书写


      19. some()
        + 语法: 数组.some( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 判断数组内是否有某一个满足条件
        + 返回值: 一个布尔值
          => true, 说明数组内至少有某一个是满足条件的
          => false, 说明数组内所有的项都不满足条件
        + 注意: 判断条件以 return 的形式书写


      20. reduce()
        + 语法: 数组.reduce(function (prev, item, index, origin) {}, init)
          => prev: 表示初始值或者上一次的运算结果
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 用来实现叠加效果
        + 返回值: 最终叠加结果
        + 注意: 叠加条件以 return 的形式书写
        + 注意: prev 的值, 如果你传递了 init, 就是 init 的值, 如果你没有传递 init, 那么就是数组 [0] 的值
        + 注意: 如果你传递了 init, 循环执行 length 次, 如果你没有传递 init, 循环执行 length - 1 次, 少的是第一次
    */


    // 13 方法案例 
    // var arr = [9,9,3,1,9, 6, 1,10, 2, 5, 11, 4, 1, 7];
    // for(var i=0;i<arr.length;i++){
    //     arr[i]
    // }

    // for(var j in arr){
    //   arr[j]
    // }

    // arr.forEach(function(zhangman,chuanbao,chenke){   // test 是数组的每一项元素 
    //     // console.log(zhangman,chuanbao)
    //     console.log(chenke)
    // })

    // 求 arr 所有元素的和 用forEach
    // var sum = 0;
    // arr.forEach(function(item){  // item就是数组的每个元素
    //     sum += item;
    // })
    
    // alert(sum);
    // 求 arr 所有偶数的和 用forEach
    // var sum = 0 ;
    // arr.forEach(function(item){  // item就是数组的每个元素
    //     if(item % 2 == 0){
    //         sum += item;
    //     }
    // })
    // alert(sum);
    // 求 arr 数组中最大数字的索引 
    // var maxIndex = 0;
    // for(var i=1;i<arr.length;i++){
    //     if(arr[i]>arr[maxIndex]){
    //         maxIndex = i
    //     }
    // }
    // alert(maxIndex)
      // var maxIndex = 0;
      // arr.forEach(function(item,index){
      //     if(item>arr[maxIndex]){
      //         maxIndex = index
      //     }
      // });

      // alert(maxIndex);
    // document.write('原始数组',arr,'<br / >');
    // var res = arr.map(function(item){   // map的结果不影响原来的数组
    //     return item+100;  // 一定要return 
    // });
    // document.write('映射以后的数组',res,'<br / >');

    // https://    
    // var websites = ['www.baidu.com','www.91yingyu.com','www.so.com','www.qq.com','www.didi.com']
    // var res = websites.map(function(item){
    //     return 'https://'+item
    // });

    // document.write('映射以后的数组',res,'<br / >');


    // filter练习  

    // var arr = [9,9,3,1,9, 6, 1,10, 2, 5, 11, 4, 1, 7];
    // var res = arr.filter(function(item){
    //     return item > 5
    // });
    // document.write('映射以后的数组',res,'<br / >');


    // dict_list = [
    // {'科目':'政治', '成绩':98},
    // {'科目':'语文', '成绩':77},
    // {'科目':'数学', '成绩':99},
    // {'科目':'历史', '成绩':65}
    // ]

    // var res = dict_list.filter(function(item){
    //     return item['成绩']>70
    // })
    // console.log('映射以后的数组',res,'<br / >');


    //find 练习 
    // 个位数是1 的 
    // var arr = [9,9,3,1,9, 6, 1,10, 2, 5, 11, 4, 1, 7];

    // var res = arr.find(function(item){
    //    return item % 10 == 1;
    // });
    // console.log('结果',res,'<br / >'); 

    // find 返回的是查找的这个元素本身  findIndex 返回的是元素的下标 
    // var arr = [9,9,3,1,9, 6, 1,10, 2, 5, 11, 4, 1, 7];

    // var res = arr.findIndex(function(item){
    //    return item % 10 == 1;
    // });
    // console.log('结果',res,'<br / >'); 


    // dict_list = [
    //   {'科目':'政治', '成绩':98},
    //   {'科目':'语文', '成绩':77},
    //   {'科目':'数学', '成绩':99},
    //   {'科目':'历史', '成绩':65}
    // ]

    // 找到及格的成绩 
    // var res = dict_list.find(function(item){
    //    return item['成绩'] >=60 ;
    // });
    // console.log('结果',res,'<br / >');

  //   // var res = dict_list.findIndex(function(item){
  //   //    return item['成绩'] >=60 ;
  //   // });
  //   // console.log('结果',res,'<br / >');
  //   // 让用户输入科目  输出成绩 
  //   // var classname = prompt('请输入科目:');
  //   // var res = dict_list.find(function(item){
  //   //    return item['科目'] == classname ;
  //   // });
  //   // console.log(typeof res);
  //   // console.log('结果',res['成绩'],'<br / >');
  //   // 找到最高分 
  //   var max = dict_list[0]['成绩'];
  //   dict_list.forEach(function(item){
  //       if(item['成绩']>max){
  //           max = item['成绩']
  //       }
  //   });
  //   console.log(max);
  //    var num = 0;
  //    var res = dict_list.find(function(item,index){
  //       num = index;
  //       return item['成绩'] == max,num ;  // 返回多个用,隔开 
  //  });

  //   console.log('结果',num+1,res['成绩'],'<br / >');
  //   // 找到最低分 
    

  // dict_list = [
  //     {'科目':'政治', '成绩':95},
  //     {'科目':'语文', '成绩':77},
  //     {'科目':'数学', '成绩':95},
  //     {'科目':'历史', '成绩':55}
  //   ]

//     var res = dict_list.every(function(item){
//         return item['成绩']>=60;
//     });


//  console.log('结果',res,'<br / >'); 

// var res = dict_list.some(function(item){
//     return item['成绩']>96
// });

// console.log('结果',res,'<br / >');


dict_list = [
      0,
      {'科目':'政治', '成绩':95},
      {'科目':'语文', '成绩':77},
      {'科目':'数学', '成绩':95},
      {'科目':'历史', '成绩':55}
    ]

    // var res = dict_list.reduce(function(prev,item){
    //     return prev + item['成绩']
    // },100);
    // // 0 + 95+77 + 95 +55
    // // 100 + 95+77 + 95 +55
    // console.log('总分',res,'<br / >');
    var num = 0
    var res = dict_list.reduce(function(prev,item){
        return prev + item['成绩']
    });
    console.log('总分',res,'<br / >'); // [object object ]

    // 我们没有设置 init 初始值  索引 prev 就是dict_list[0]
    // dict_list[0] 是个对象 不能跟数值直接运算 


    
    </script>
</body>

</html>